module.exports = {
    base64_encode: function (r) {
        for (var e, a, t, h = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', o = 0, c = r.length, d = ''; o < c; ) {
            if (((e = 255 & r.charCodeAt(o++)), o == c)) {
                (d += h.charAt(e >> 2)), (d += h.charAt((3 & e) << 4)), (d += '==');
                break;
            }
            if (((a = r.charCodeAt(o++)), o == c)) {
                (d += h.charAt(e >> 2)), (d += h.charAt(((3 & e) << 4) | ((240 & a) >> 4))), (d += h.charAt((15 & a) << 2)), (d += '=');
                break;
            }
            (t = r.charCodeAt(o++)),
                (d += h.charAt(e >> 2)),
                (d += h.charAt(((3 & e) << 4) | ((240 & a) >> 4))),
                (d += h.charAt(((15 & a) << 2) | ((192 & t) >> 6))),
                (d += h.charAt(63 & t));
        }
        return d;
    },
    base64_decode: function (r) {
        for (
            var e,
                a,
                t,
                h,
                o = new Array(
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    62,
                    -1,
                    -1,
                    -1,
                    63,
                    52,
                    53,
                    54,
                    55,
                    56,
                    57,
                    58,
                    59,
                    60,
                    61,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    24,
                    25,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1,
                    26,
                    27,
                    28,
                    29,
                    30,
                    31,
                    32,
                    33,
                    34,
                    35,
                    36,
                    37,
                    38,
                    39,
                    40,
                    41,
                    42,
                    43,
                    44,
                    45,
                    46,
                    47,
                    48,
                    49,
                    50,
                    51,
                    -1,
                    -1,
                    -1,
                    -1,
                    -1
                ),
                c = 0,
                d = r.length,
                i = '';
            c < d;

        ) {
            do {
                e = o[255 & r.charCodeAt(c++)];
            } while (c < d && -1 == e);
            if (-1 == e) break;
            do {
                a = o[255 & r.charCodeAt(c++)];
            } while (c < d && -1 == a);
            if (-1 == a) break;
            i += String.fromCharCode((e << 2) | ((48 & a) >> 4));
            do {
                if (61 == (t = 255 & r.charCodeAt(c++))) return i;
                t = o[t];
            } while (c < d && -1 == t);
            if (-1 == t) break;
            i += String.fromCharCode(((15 & a) << 4) | ((60 & t) >> 2));
            do {
                if (61 == (h = 255 & r.charCodeAt(c++))) return i;
                h = o[h];
            } while (c < d && -1 == h);
            if (-1 == h) break;
            i += String.fromCharCode(((3 & t) << 6) | h);
        }
        return i;
    }
};
